home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / fb386 / lib / blb / sample / filesel.bas next >
Encoding:
BASIC Source File  |  1995-02-18  |  22.6 KB  |  383 lines

  1. 10 CLEAR,,,,,100000:SCREEN@0:SCREEN 0:CLS:MOUSE 0:DIM BLB_MEM%(78000):DEF FONT"システム   12ドット"
  2. 20 PALETTE 9,[176,128,224]:PALETTE 6,[196,196,196]:PALETTE 8,[32,32,32]
  3. 30 PALETTE 1,[112,32,176]:PALETTE 7,[112,112,112]:LINE(0,0)-(639,479),PSET,%7,BF
  4. 35 BLB_RESO_X=640:BLB_RESO_Y=480
  5. 40 TITLE$="ファイル選択":WILD$="*":KEY_IN=1:FILE$="FILESEL.BAS":GOSUB *BLB_FILESEL
  6. 41 IF KRIGHT$(PATH$,1)<>"\" THEN PATH$=PATH$+"\"
  7. 42 LOCATE 0,5:IF FILE$="" THEN PRINT"ファイルは選択されませんでした。":END
  8. 50 PRINT PATH$+FILE$;" が選択されました。":END
  9. 60000 '----------------------- ファイルセレクター(16色)  version 2.11 --------------------------------
  10. 60001 '入力 title$ ・・・ タイトル
  11. 60002 '     wild$  ・・・ 拡張子ワイルドカード(英大文字3字  例:BAS , TIF , ???(*でも可))
  12. 60003 '                  複数指定時は各拡張子をつなげる  例:BASC  ASM(3字未満はスペースをあける)
  13. 60004 '     key_in ・・・ 入力フィールド 0=なし 1=あり
  14. 60005 '     file$  ・・・ 入力フィールドに最初に表示するファイル名(key_in=1のとき)
  15. 60006 '出力 file$  ・・・ ファイル名(KEY_IN=1ならば入力フィールドで編集されたファイル名)    path$ ・・・ パス名
  16. 60007 '注意 def font"システム   12ドット" 及び dim blb_mem%(78000)を実行しておくこと
  17. 60008 '     mousepat.blbシリーズ必須
  18. 60009 '
  19. 60010 *BLB_FILESEL
  20. 60011  BLB_DX%=185:BLB_DY%=124:BLB_CS%=0:DIM BLB_ICN&(31):FILE$=KMID$(FILE$,KINSTR(FILE$,":")+1)
  21. 60012  WHILE KINSTR(FILE$,"\")>0:FILE$=KMID$(FILE$,KINSTR(FILE$,"\")+1):WEND:BLB_F$=RIGHT$(FILE$,12)
  22. 60013 '
  23. 60014 '画面描画
  24. 60015 '
  25. 60016  MOUSE 1,,,0:GET@A(BLB_DX%,BLB_DY%)-(BLB_DX%+270,BLB_DY%+233),BLB_MEM%
  26. 60017  LINE(BLB_DX%,BLB_DY%)-STEP(270,233),PSET,%8,BF,7
  27. 60018  LINE(BLB_DX%,BLB_DY%)-STEP(270,16),PSET,%8,BF,1
  28. 60019  LINE(BLB_DX%,BLB_DY%)-STEP(32+LEN(TITLE$)*6,16),PSET,%8,BF
  29. 60020  SYMBOL(BLB_DX%+24,BLB_DY%+3),TITLE$,.75!,.75!,7
  30. 60021  LINE(BLB_DX%+268,BLB_DY%)-STEP(1,232),PSET,%8,B:LINE-STEP(-268,0),PSET,%8
  31. 60022  LINE(BLB_DX%+2,BLB_DY%+2)-STEP(12,12),PSET,7,BF,%6
  32. 60023  LINE(BLB_DX%+2,BLB_DY%+2)-STEP(12,12),PSET,7
  33. 60024  LINE(BLB_DX%+2,BLB_DY%+14)-STEP(12,-12),PSET,7
  34. 60025  LINE(BLB_DX%+4,BLB_DY%+60)-STEP(86,15),PSET,%8,B
  35. 60026  LINE(BLB_DX%+4,BLB_DY%+78)-STEP(239,127),PSET,%8,B
  36. 60027  CONNECT(BLB_DX%+254,BLB_DY%+180)-STEP(1,0)-STEP(3,3)-STEP(0,1)-STEP(-7,0)-STEP(0,-1),%8,,F
  37. 60028  CONNECT(BLB_DX%+254,BLB_DY%+199)-STEP(1,0)-STEP(3,-3)-STEP(0,-1)-STEP(-7,0)-STEP(0,1),%8,,F
  38. 60029  CONNECT(BLB_DX%+167,BLB_DY%+208)-STEP(42,0)-STEP(3,3)-STEP(0,15)-STEP(-3,3)-STEP(-42,0)-STEP(-3,-3)-STEP(0,-15),%8,,F,7
  39. 60030  FOR I%=0 TO 1:CONNECT(BLB_DX%+168+I%*52,BLB_DY%+210)-STEP(40,0)-STEP(2,2)-STEP(0,13)-STEP(-2,2)-STEP(-40,0)-STEP(-2,-2)-STEP(0,-13),%8,,F,7
  40. 60031   SYMBOL STEP(10,1),KMID$("選択取消",I%*2+1,2),.75!,.75!,%8,,,,1
  41. 60032   LINE(BLB_DX%+262,BLB_DY%+174+I%*16)-STEP(-15,15),PSET,%8,B
  42. 60033   CONNECT STEP(3,-2)-STEP(10,0)-STEP(0,-10)-STEP(1,-1)-STEP(0,13)-STEP(-13,0),%8,,F,%8:NEXT
  43. 60034  CONNECT(BLB_DX%+185,BLB_DY%+60)-STEP(56,0)-STEP(2,2)-STEP(0,11)-STEP(-2,2)-STEP(-56,0)-STEP(-2,-2)-STEP(0,-11),%8,,F,7:SYMBOL STEP(10,0),"DIR移動",.75!,.75!,%8
  44. 60035  LINE(BLB_DX%+246,BLB_DY%+59)-STEP(17,17),PSET,%8,B
  45. 60036  A$="0006000f801fc03fe076606600000000e08b108a108ae08b008a0072"
  46. 60037  FOR I%=0 TO 13:BLB_ICN&(I%)=VAL("&h"+MID$(A$,I%*4+1,4)):NEXT
  47. 60038  PUT@(BLB_DX%+249,BLB_DY%+61)-(BLB_DX%+249+31,BLB_DY%+61+13),BLB_ICN&,,%8
  48. 60039  LINE(BLB_DX%+247,BLB_DY%+78)-STEP(15,96),PSET,%8,BF,1
  49. 60040  FOR I%=0 TO 1:LINE(BLB_DX%+4+I%*71,BLB_DY%+21)-STEP(15,36),PSET,%8,B:NEXT
  50. 60041  CONNECT(BLB_DX%+8,BLB_DY%+39)-STEP(6,-6)-STEP(0,12),%8,PSET,F,%8
  51. 60042  CONNECT(BLB_DX%+86,BLB_DY%+39)-STEP(-6,-6)-STEP(0,12),%8,PSET,F,%8
  52. 60043  LINE (BLB_DX%+22,BLB_DY%+21)-STEP(50,36),PSET,%8,B
  53. 60044  IF KEY_IN=1 THEN LINE(BLB_DX%+4,BLB_DY%+208)-STEP(90,15),PSET,%8,B:GOSUB *BLB_FS_PUT_FILENAME
  54. 60045  FOR I%=0 TO 15:LINE(BLB_DX%+95+(I% MOD 8)*21,BLB_DY%+21+(I%\8)*18)-STEP(21,18),PSET,%8,B
  55. 60046   SYMBOL(BLB_DX%+100+(I% MOD 8)*21,BLB_DY%+25+(I%\8)*18),AKCNV$(CHR$(I%+65-(I%>1))),.75!,.75!,%(8+(INP(&H31DC+(I%-(I%>1))*4)\255)*2*(I%<>15)),,,1
  56. 60047  NEXT:BLB_DRV%=-1:GOSUB *BLB_FS_GETFILE:GOSUB *BLB_FS_DIRPRINT:MOUSEPAT=0:GOSUB *BLB_MOUSEPAT
  57. 60048  GOSUB *BLB_FS_DRVXOR:WHILE INKEY$<>"":WEND
  58. 60049 '
  59. 60050 'メインルーチン
  60. 60051 '
  61. 60052 *BLB_FS_MAIN
  62. 60053  I%=ASC(INKEY$+CHR$(0)):IF I%=13 THEN I%=0:GOTO *BLB_FS_SEL2 ELSE IF I%=27 OR I%=24 THEN I%=-1:GOTO *BLB_FS_SEL2 ELSE IF I%>0 THEN GOSUB *BLB_FS_KEYINPUT
  63. 60054  IF MOUSE(2,0)=0 THEN *BLB_FS_MAIN
  64. 60055  BLB_MX%=MOUSE(0)-BLB_DX%:BLB_MY%=MOUSE(1)-BLB_DY%
  65. 60056 *BLB_FS_MAIN2
  66. 60057  IF BLB_MX%<0 OR BLB_MX%>270 OR BLB_MY%<0 OR BLB_MY%>233 THEN WHILE MOUSE(2,0):WEND:GOTO *BLB_FS_MAIN
  67. 60058  IF BLB_MX%>1 AND BLB_MX%<15 AND BLB_MY%>1 AND BLB_MY%<15 THEN *BLB_FS_EXITボタン
  68. 60059  IF BLB_MX%>94 AND BLB_MX%<263 AND BLB_MY%>20 AND BLB_MY%<58 THEN *BLB_FS_DRIVE1
  69. 60060  IF BLB_MX%>246 AND BLB_MX%<263 AND BLB_MY%>173 AND BLB_MY%<206 THEN *BLB_FS_UPDOWN
  70. 60061  IF BLB_MX%>247 AND BLB_MX%<262 AND BLB_MY%>78 AND BLB_MY%<174 THEN *BLB_FS_BAR
  71. 60062  IF BLB_MX%>4 AND BLB_MX%<244 AND BLB_MY%>78 AND BLB_MY%<203 THEN *BLB_FS_MARK
  72. 60063  IF BLB_MX%>246 AND BLB_MX%<263 AND BLB_MY%>59 AND BLB_MY%<76 THEN *BLB_FS_UPDIR
  73. 60064  IF BLB_MX%>182 AND BLB_MX%<244 AND BLB_MY%>59 AND BLB_MY%<76 THEN *BLB_FS_CHANGEDIR
  74. 60065  IF BLB_MX%>4 AND BLB_MX%<94 AND BLB_MY%>208 AND BLB_MY%<223 AND KEY_IN=1 THEN *BLB_FS_FNAME_CLICKED
  75. 60066  IF BLB_MX%>22 AND BLB_MX%<72 AND BLB_MY%>21 AND BLB_MY%<57 THEN *BLB_FS_DRIVE2
  76. 60067  IF BLB_MX%> 5 AND BLB_MX%<19 AND BLB_MY%>21 AND BLB_MY%<57 THEN *BLB_FS_DRIVE3
  77. 60068  IF BLB_MX%>76 AND BLB_MX%<90 AND BLB_MY%>21 AND BLB_MY%<57 THEN *BLB_FS_DRIVE3
  78. 60069  IF BLB_MX%>166 AND BLB_MX%<210 AND BLB_MY%>210 AND BLB_MY%<227 THEN *BLB_FS_SEL
  79. 60070  IF BLB_MX%>218 AND BLB_MX%<262 AND BLB_MY%>210 AND BLB_MY%<227 THEN *BLB_FS_SEL
  80. 60071 '
  81. 60072 'ダイアログ移動
  82. 60073 '
  83. 60074 *BLB_FS_MOVE
  84. 60075  A%=BLB_DX%:B%=BLB_DY%:BLB_ICN&(0)=BLB_MX%:BLB_ICN&(1)=BLB_MY%
  85. 60076  LINE(A%,B%)-STEP(270,233),XOR,%7,B:MOUSEPAT=3:GOSUB *BLB_MOUSEPAT
  86. 60077  MOUSE 4,BLB_MX%,BLB_MY%,BLB_RESO_X-271+BLB_MX%,BLB_RESO_Y-234+BLB_MY%
  87. 60078  WHILE MOUSE(2,0):C%=MOUSE(0)-BLB_ICN&(0):I%=MOUSE(1)-BLB_ICN&(1)
  88. 60079   IF A%<>C% OR B%<>I% THEN LINE(A%,B%)-STEP(270,233),XOR,%7,B:LINE(C%,I%)-STEP(270,233),XOR,%7,B:A%=C%:B%=I%
  89. 60080  WEND:LINE(A%,B%)-STEP(270,233),XOR,%7,B
  90. 60081  MOUSEPAT=0:GOSUB *BLB_MOUSEPAT:MOUSE 4,0,0,BLB_RESO_X-1,BLB_RESO_Y-1
  91. 60082  IF A%=BLB_DX% AND B%=BLB_DY% THEN *BLB_FS_MAIN
  92. 60083  GET@A(BLB_DX%,BLB_DY%)-(BLB_DX%+270,BLB_DY%+233),BLB_MEM%,40000
  93. 60084  PUT@A(BLB_DX%,BLB_DY%)-(BLB_DX%+270,BLB_DY%+233),BLB_MEM%
  94. 60085  BLB_DX%=A%:BLB_DY%=B%:GET@A(BLB_DX%,BLB_DY%)-(BLB_DX%+270,BLB_DY%+233),BLB_MEM%
  95. 60086  PUT@A(BLB_DX%,BLB_DY%)-(BLB_DX%+270,BLB_DY%+233),BLB_MEM%,,,,,40000:GOTO *BLB_FS_MAIN
  96. 60087 '
  97. 60088 'ドライブ名選択
  98. 60089 '
  99. 60090 *BLB_FS_DRIVE1
  100. 60091  I%=(BLB_MX%-95)\21+((BLB_MY%-21)\18)*8:I%=I%-(I%>1):IF INP(&H31DC+I%*4)=255 THEN *BLB_FS_MOVE
  101. 60092  GOSUB *BLB_FS_DRVXOR:GOSUB *BLB_FS_ERASE:BLB_DRV%=I%:GOSUB *BLB_FS_DRVXOR
  102. 60093  SHELL CHR$(I%+65)+":":GOSUB *BLB_FS_GETFILE:GOSUB *BLB_FS_DIRPRINT
  103. 60094  WHILE MOUSE(2,0):WEND:GOTO *BLB_FS_MAIN
  104. 60095 'ドライブアイコン選択
  105. 60096 *BLB_FS_DRIVE2
  106. 60097  B%=0:WHILE MOUSE(2,0):BLB_MX%=MOUSE(0)-BLB_DX%:BLB_MY%=MOUSE(1)-BLB_DY%
  107. 60098   A%=(BLB_MX%>22)*(BLB_MX%<72)*(BLB_MY%>21)*(BLB_MY%<57)
  108. 60099   IF A%<>B% THEN LINE(BLB_DX%+23,BLB_DY%+22)-STEP(48,34),XOR,%7,BF:B%=A%
  109. 60100  WEND:IF B%=0 THEN *BLB_FS_MAIN ELSE LINE(BLB_DX%+23,BLB_DY%+22)-STEP(48,34),XOR,%7,BF
  110. 60101  GOSUB *BLB_FS_ERASE:GOSUB *BLB_FS_GETFILE:GOSUB *BLB_FS_DIRPRINT:GOTO *BLB_FS_MAIN
  111. 60102 '←→押下
  112. 60103 *BLB_FS_DRIVE3
  113. 60104  I%=BLB_MX%<50:B%=0:WHILE MOUSE(2,0):BLB_MX%=MOUSE(0)-BLB_DX%:BLB_MY%=MOUSE(1)-BLB_DY%
  114. 60105   A%=(BLB_MX%>76+I%*71)*(BLB_MX%<90+I%*71)*(BLB_MY%>21)*(BLB_MY%<57)
  115. 60106   IF A%<>B% THEN LINE(BLB_DX%+76+I%*71,BLB_DY%+22)-STEP(13,34),XOR,%7,BF:B%=A%
  116. 60107  WEND:IF B%=0 THEN *BLB_FS_MAIN ELSE LINE(BLB_DX%+76+I%*71,BLB_DY%+22)-STEP(13,34),XOR,%7,BF
  117. 60108  A%=I%*2+1:I%=(BLB_DRV%+A%+17)MOD 17:WHILE INP(&H31DC+I%*4)=255 AND I%<16 OR I%=2
  118. 60109   I%=(I%+A%+17)MOD 17:WEND
  119. 60110  GOSUB *BLB_FS_DRVXOR:GOSUB *BLB_FS_ERASE:BLB_DRV%=I%:BLB_FILE&(1)=-1:BLB_FILE$(0)=CHR$(I%+65)+": ":SHELL BLB_FILE$(0):GOSUB *BLB_FS_DRVXOR:GOSUB *BLB_FS_DIRPRINT:GOTO *BLB_FS_MAIN
  120. 60111 '
  121. 60112 'ファイル名クリック処理
  122. 60113 '
  123. 60114 *BLB_FS_MARK
  124. 60115  WHILE MOUSE(2,0):BLB_MX%=MOUSE(0)-BLB_DX%:BLB_MY%=MOUSE(1)-BLB_DY%
  125. 60116   B%=BLB_FSEL%-BLB_FILE&(0):A%=(BLB_MY%-79)\14+BLB_FILE&(0)
  126. 60117   IF BLB_MX%>4 AND BLB_MX%<244 AND BLB_MY%>78 AND BLB_MY%<203 THEN
  127. 60118    IF A%<>BLB_FSEL% THEN
  128. 60119     IF B%>=0 AND B%<9 THEN LINE(BLB_DX%+5,BLB_DY%+79+B%*14)-STEP(237,13),XOR,%7,BF
  129. 60120     IF A%=<BLB_FILE&(1) THEN LINE(BLB_DX%+5,BLB_DY%+79+(A%-BLB_FILE&(0))*14)-STEP(237,13),XOR,%7,BF:BLB_FSEL%=A% ELSE BLB_FSEL%=0
  130. 60121    ENDIF
  131. 60122   ELSE
  132. 60123    I%=(BLB_MY%<79)-(BLB_MY%>202)
  133. 60124    IF BLB_FSEL%>0 THEN LINE(BLB_DX%+5,BLB_DY%+79+B%*14)-STEP(237,13),XOR,%7,BF:BLB_FSEL%=0
  134. 60125    IF I%+BLB_FILE&(0)>0 AND I%+BLB_FILE&(0)+7<BLB_FILE&(1) AND I%<>0 THEN GOSUB *BLB_FS_SCROLL
  135. 60126   ENDIF
  136. 60127  WEND:IF ASC(BLB_FILE$(BLB_FSEL%))=32 THEN GOSUB *BLB_FS_選択:GOSUB *BLB_FS_PUT_FILENAME
  137. 60128  A%=INP(&H3B04)*100/128:I%=0:WHILE MOUSE(2,0)=0 AND I%<A%:WAIT 1:I%=I%+1:WEND
  138. 60129  IF I%=A% THEN *BLB_FS_MAIN
  139. 60130  BLB_MX%=MOUSE(0)-BLB_DX%:BLB_MY%=MOUSE(1)-BLB_DY%
  140. 60131  IF BLB_MX%<5 OR BLB_MX%>243 OR BLB_MY%<79 OR BLB_MY%>202 THEN *BLB_FS_MAIN2
  141. 60132  IF BLB_FSEL%<>(BLB_MY%-79)\14+BLB_FILE&(0) THEN *BLB_FS_MARK
  142. 60133 'ダブルクリック成立
  143. 60134  GOSUB *BLB_FS_選択:IF ASC(BLB_FILE$(BLB_FSEL%))=32 THEN *BLB_FS_終了 ELSE *BLB_FS_CHANGEDIR2
  144. 60135 '
  145. 60136 '↑UPボタン処理
  146. 60137 '
  147. 60138 *BLB_FS_UPDIR
  148. 60139  B%=0:WHILE MOUSE(2,0):BLB_MX%=MOUSE(0)-BLB_DX%:BLB_MY%=MOUSE(1)-BLB_DY%
  149. 60140   A%=(BLB_MX%>246)*(BLB_MX%<263)*(BLB_MY%>59)*(BLB_MY%<76)
  150. 60141   IF A%<>B% THEN LINE(BLB_DX%+247,BLB_DY%+60)-STEP(15,15),XOR,%7,BF:B%=A%
  151. 60142  WEND:IF B%=0 THEN *BLB_FS_MAIN
  152. 60143  LINE(BLB_DX%+247,BLB_DY%+60)-STEP(15,15),XOR,%7,BF:IF LEN(BLB_FILE$(0))=3 THEN *BLB_FS_MAIN
  153. 60144  A$="..":GOSUB *BLB_FS_SECURITY:GOTO *BLB_FS_MAIN
  154. 60145 '
  155. 60146 'ディレクトリ移動
  156. 60147 '
  157. 60148 *BLB_FS_CHANGEDIR
  158. 60149  B%=0:WHILE MOUSE(2,0):BLB_MX%=MOUSE(0)-BLB_DX%:BLB_MY%=MOUSE(1)-BLB_DY%
  159. 60150  A%=(BLB_MX%>182)*(BLB_MX%<244)*(BLB_MY%>59)*(BLB_MY%<76)
  160. 60151  IF A%<>B% THEN CONNECT(BLB_DX%+185,BLB_DY%+61)-STEP(56,0)-STEP(1,1)-STEP(0,11)-STEP(-1,1)-STEP(-56,0)-STEP(-1,-1)-STEP(0,-11),%7,XOR,F,%7:B%=A%
  161. 60152  WEND:IF B%=0 THEN *BLB_FS_MAIN
  162. 60153  CONNECT(BLB_DX%+185,BLB_DY%+61)-STEP(56,0)-STEP(1,1)-STEP(0,11)-STEP(-1,1)-STEP(-56,0)-STEP(-1,-1)-STEP(0,-11),%7,XOR,F,%7
  163. 60154  IF BLB_FSEL%=0 THEN *BLB_FS_MAIN
  164. 60155  GOSUB *BLB_FS_選択:BLB_CS%=0:GOSUB *BLB_FS_PUT_FILENAME:IF ASC(BLB_FILE$(BLB_FSEL%))=32 THEN *BLB_FS_MAIN
  165. 60156 *BLB_FS_CHANGEDIR2
  166. 60157  IF LEFT$(FILE$,2)="<ル" THEN FILE$="\" ELSE IF KLEFT$(FILE$,2)="<親" THEN FILE$=".."
  167. 60158  A$=FILE$:GOSUB *BLB_FS_SECURITY:GOTO *BLB_FS_MAIN
  168. 60159 '
  169. 60160 '▲▼ボタン処理
  170. 60161 '
  171. 60162 *BLB_FS_UPDOWN
  172. 60163  A%=0:C%=(BLB_MY%-174)\16
  173. 60164  WHILE MOUSE(2,0):BLB_MX%=MOUSE(0)-BLB_DX%:BLB_MY%=MOUSE(1)-BLB_DY%
  174. 60165   B%=A%:A%=(BLB_MX%>246)*(BLB_MX%<263)*(BLB_MY%>173+C%*16)*(BLB_MY%<189+C%*16)
  175. 60166   IF B%<>A% THEN CONNECT(BLB_DX%+250,BLB_DY%+187+16*C%)-STEP(10,0)-STEP(0,-10)-STEP(1,-1)-STEP(0,12)-STEP(-12,0),%(8+7*A%):B%=A%
  176. 60167   IF A%=1 AND (C%=0 AND BLB_FILE&(0)>1 OR C%=1 AND BLB_FILE&(0)+9=<BLB_FILE&(1)) THEN
  177. 60168    BLB_MX%=B%:I%=C%*2-1:GOSUB *BLB_FS_SCROLL:B%=BLB_MX%
  178. 60169   ENDIF
  179. 60170  WEND:CONNECT(BLB_DX%+250,BLB_DY%+187+16*C%)-STEP(10,0)-STEP(0,-10)-STEP(1,-1)-STEP(0,12)-STEP(-12,0),%8:GOTO *BLB_FS_MAIN
  180. 60171 '
  181. 60172 'バー押下処理
  182. 60173 '
  183. 60174 *BLB_FS_BAR:MOUSEPAT=3:GOSUB *BLB_MOUSEPAT
  184. 60175  WHILE MOUSE(2,0):IF ABS(MOUSE(0)-BLB_DX%-255)<25 AND BLB_FILE&(1)>9 THEN
  185. 60176    A%=(MOUSE(1)-BLB_DY%-79-BLB_BARL%\2)*BLB_FILE&(1)/94
  186. 60177    IF A%<1 THEN A%=1 ELSE IF A%+9>BLB_FILE&(1) THEN A%=BLB_FILE&(1)-8
  187. 60178    I%=A%-BLB_FILE&(0):IF I%<>0 THEN IF ABS(I%)<8 THEN GOSUB *BLB_FS_SCROLL ELSE BLB_FILE&(0)=A%:B%=A%+8:GOSUB *BLB_FS_PRINT
  188. 60179   ENDIF
  189. 60180  WEND:MOUSEPAT=0:GOSUB *BLB_MOUSEPAT:GOTO *BLB_FS_MAIN
  190. 60181 '
  191. 60182 'EXITボタン
  192. 60183 '
  193. 60184 *BLB_FS_EXITボタン
  194. 60185  B%=0:WHILE MOUSE(2,0):BLB_MX%=MOUSE(0)-BLB_DX%:BLB_MY%=MOUSE(1)-BLB_DY%
  195. 60186   A%=(BLB_MX%>1)*(BLB_MX%<15)*(BLB_MY%>1)*(BLB_MY%<15)
  196. 60187   IF A%<>B% THEN LINE(BLB_DX%+2,BLB_DY%+2)-STEP(12,12),XOR,%7,BF:B%=A%
  197. 60188  WEND:IF B%=1 THEN FILE$="":PATH$="":GOTO *BLB_FS_終了 ELSE *BLB_FS_MAIN
  198. 60189 *BLB_FS_選択
  199. 60190  PATH$=BLB_FILE$(0):A$=MID$(BLB_FILE$(BLB_FSEL%),2,12):MID$(A$,9)="."
  200. 60191  FILE$="":FOR I%=1 TO KLEN(A$):IF KMID$(A$,I%,1)<>" " THEN FILE$=FILE$+KMID$(A$,I%,1)
  201. 60192  NEXT:IF ASC(BLB_FILE$(BLB_FSEL%))=32 THEN BLB_F$=FILE$:BLB_CS%=0:RETURN ELSE RETURN
  202. 60193 *BLB_FS_終了
  203. 60194  ERASE BLB_ICN&,BLB_FILE$:PUT@A(BLB_DX%,BLB_DY%)-(BLB_DX%+270,BLB_DY%+233),BLB_MEM%:RETURN
  204. 60195 '
  205. 60196 '選択/取消ボタン
  206. 60197 '
  207. 60198 *BLB_FS_SEL
  208. 60199  I%=BLB_MX%>210:B%=0:WHILE MOUSE(2,0):BLB_MX%=MOUSE(0)-BLB_DX%+I%*52:BLB_MY%=MOUSE(1)-BLB_DY%
  209. 60200   A%=(BLB_MX%>166)*(BLB_MX%<210)*(BLB_MY%>210)*(BLB_MY%<227)
  210. 60201   IF A%<>B% THEN CONNECT(BLB_DX%+168-I%*52,BLB_DY%+211)-STEP(40,0)-STEP(1,1)-STEP(0,13)-STEP(-1,1)-STEP(-40,0)-STEP(-1,-1)-STEP(0,-13),%7,XOR,F,%7:B%=A%
  211. 60202  WEND:IF B%=0 THEN *BLB_FS_MAIN
  212. 60203  CONNECT(BLB_DX%+168-I%*52,BLB_DY%+211)-STEP(40,0)-STEP(1,1)-STEP(0,13)-STEP(-1,1)-STEP(-40,0)-STEP(-1,-1)-STEP(0,-13),%7,XOR,F,%7
  213. 60204 *BLB_FS_SEL2
  214. 60205  IF I%<0 THEN FILE$="":PATH$="":GOTO *BLB_FS_終了 ELSE IF (BLB_FSEL%=0 AND KEY_IN=0) OR (KEY_IN=1 AND BLB_F$="") THEN *BLB_FS_MAIN
  215. 60206  IF KEY_IN=0 THEN GOSUB *BLB_FS_選択:IF ASC(BLB_FILE$(BLB_FSEL%))=60 THEN *BLB_FS_MAIN
  216. 60207  IF KEY_IN=1 THEN PATH$=BLB_FILE$(0):FILE$=BLB_F$
  217. 60208  GOTO *BLB_FS_終了
  218. 60209 '
  219. 60210 'ファイル名取得  (BLB_FILE&(0)=表示開始FILE No.  BLB_FILE&(1)=ファイル数+1)
  220. 60211 '
  221. 60212 *BLB_FS_GETFILE:MOUSEPAT=1:GOSUB *BLB_MOUSEPAT
  222. 60213  ON ERROR GOTO *BLB_FS_GF_ERROR:BLB_FILE&(0)=1:BLB_FILE&(2)=0:BLB_FSEL%=0:FILES ,C,BLB_FILE&:FILES ,C,BLB_FILE&:BLB_FILE&(2)=BLB_FILE&(1)
  223. 60214  DIM BLB_F$(BLB_FILE&(1)),BLB_FILE$(BLB_FILE&(1))
  224. 60215  FILES ,N,BLB_F$:GOSUB *BLB_FS_SORT:A%=1:BLB_FILE$(0)=BLB_F$(0)
  225. 60216  I%=1:WHILE I%=<BLB_FILE&(1):A%=A%-(MID$(BLB_F$(I%),17,1)="-"):I%=I%+1:WEND
  226. 60217  B%=1:I%=1:WHILE I%=<BLB_FILE&(1)
  227. 60218   IF MID$(BLB_F$(I%),17,1)="-" THEN
  228. 60219    BLB_FILE$(B%)=BLB_F$(I%):B%=B%+1
  229. 60220   ELSE
  230. 60221    IF INSTR(WILD$,"???")+INSTR(WILD$,"*")-(INSTR(WILD$,MID$(BLB_F$(I%),10,3))MOD 3=1) THEN BLB_FILE$(A%)=BLB_F$(I%):A%=A%+1
  231. 60222   ENDIF
  232. 60223  I%=I%+1:WEND:BLB_FILE&(1)=A%-1:ERASE BLB_F$:GOSUB *BLB_FS_PROCESSING
  233. 60224 *BLB_FS_GFRET:ON ERROR GOTO 0:A%=1:B%=9:GOSUB *BLB_FS_PRINT:MOUSEPAT=0:GOSUB *BLB_MOUSEPAT:RETURN
  234. 60225 *BLB_FS_GF_ERROR:IF ERR=63 THEN RESUME NEXT
  235. 60226  IF BLB_DRV%<0 THEN BLB_DRV%=16:SHELL"Q:":RESUME
  236. 60227  BLB_FILE&(1)=-1:BLB_FILE$(0)=CHR$(BLB_DRV%+65)+":<Not Ready>":RESUME *BLB_FS_GFRET
  237. 60228 '
  238. 60229 'ファイル名加工
  239. 60230 '
  240. 60231 *BLB_FS_PROCESSING
  241. 60232  I%=1:WHILE I%=<BLB_FILE&(1):A$=BLB_FILE$(I%):MID$(A$,33)="-":MID$(A$,36)="-"
  242. 60233   IF MID$(A$,17,1)="-" THEN
  243. 60234    A$="<"+LEFT$(A$,12)+">           "+MID$(A$,31,14)
  244. 60235    IF MID$(A$,2,2)=". " THEN A$="<<ルートディレクトリ>>"
  245. 60236    IF MID$(A$,2,2)=".." THEN A$="<<親ディレクトリ >>"
  246. 60237   ELSE
  247. 60238    A$=" "+LEFT$(A$,12)+" "+MID$(A$,17,10)+" "+MID$(A$,31,14)
  248. 60239   ENDIF
  249. 60240   BLB_FILE$(I%)=A$:I%=I%+1:WEND:RETURN
  250. 60241 '
  251. 60242 'カレントドライブ&ディレクトリ名表示
  252. 60243 '
  253. 60244 *BLB_FS_DIRPRINT
  254. 60245  A%=ASC(BLB_FILE$(0))-65:B%=INP(&H31DC+A%*4):BLB_DRV%=A%
  255. 60246  IF A%=16 THEN C%=68 ELSE IF B%=0 THEN C%=65+INP(&H31DC+A%*4+2)\2 ELSE IF B%=2 THEN C%=72
  256. 60247  IF B%=3 THEN
  257. 60248   FOR I%=0 TO 31:BLB_ICN&(I%)=0:NEXT
  258. 60249   A$="30180C06482412094824120948241209FEFFFF7F03000040030000402384C1436386214263462242A3452242A345C2432324444223E4274223242442232424420300004003000040FFFFFF7FFFFFFF3F48241209482412094824120930180C06"
  259. 60250   FOR I%=0 TO 95:POKE VARPTR(BLB_ICN&(5))+(I%\4)*4+(3-I% MOD 4),VAL("&h"+MID$(A$,I%*2+1,2)):NEXT
  260. 60251  ELSE
  261. 60252   FOR I%=0 TO 31:BLB_ICN&(I%)=PEEK([&H108]&H27F00+C%*256+I%*4,4):NEXT
  262. 60253  ENDIF
  263. 60254  PUT@(BLB_DX%+32,BLB_DY%+24)-(BLB_DX%+63,BLB_DY%+55),BLB_ICN&,,%8
  264. 60255  IF BLB_FILE&(1)>=0 THEN
  265. 60256   A$=STR$(DSKF(A%)):A%=LEN(A$)-2:I%=0
  266. 60257   WHILE I%<A%\3:A$=LEFT$(A$,LEN(A$)-3-I%*4)+","+MID$(A$,LEN(A$)-2-I%*4):I%=I%+1:WEND
  267. 60258   SYMBOL(BLB_DX%+100,BLB_DY%+62),RIGHT$("      "+A$,9)+" KB",.75!,.75!,%8
  268. 60259  ENDIF
  269. 60260 *BLB_FS_DIRPRINT2
  270. 60261  A$=MID$(BLB_FILE$(0),3)
  271. 60262  WHILE KINSTR(A$,"\")>0:A$=KMID$(A$,KINSTR(A$,"\")+1):WEND:IF A$="" THEN A$="\"
  272. 60263  LINE(BLB_DX%+5,BLB_DY%+61)-STEP(84,13),PSET,7,BF
  273. 60264  SYMBOL(BLB_DX%+12,BLB_DY%+62),A$,.75!,.75!,%8
  274. 60265 RETURN
  275. 60266 '
  276. 60267 'カレントドライブ&ディレクトリ名消去
  277. 60268 '
  278. 60269 *BLB_FS_ERASE
  279. 60270  LINE(BLB_DX%+32,BLB_DY%+23)-STEP(31,31),PSET,7,BF
  280. 60271  LINE(BLB_DX%+100,BLB_DY%+62)-STEP(71,11),PSET,7,BF
  281. 60272 *BLB_FS_ERASE2
  282. 60273  LINE(BLB_DX%+5,BLB_DY%+79)-STEP(237,125),PSET,7,BF:BLB_FILE&(0)=0:BLB_FILE&(2)=0:ERASE BLB_FILE$:RETURN
  283. 60274 *BLB_FS_DRVXOR
  284. 60275  A%=BLB_DRV%+(BLB_DRV%>1)
  285. 60276  LINE(BLB_DX%+96+(A% MOD 8)*21,BLB_DY%+22+(A%\8)*18)-STEP(19,16),XOR,%7,BF:RETURN
  286. 60277 '
  287. 60278 'ファイル名&バー表示(1=<A%~B%(絶対位置)) 使用変数 I%
  288. 60279 '
  289. 60280 *BLB_FS_PRINT
  290. 60281  MOUSE 1,,,0:FOR I%=A% TO B%
  291. 60282   LINE(BLB_DX%+5,BLB_DY%+79+(I%-BLB_FILE&(0))*14)-STEP(237,13),PSET,%15+(I%=BLB_FSEL%)*7,BF
  292. 60283   IF I%=<BLB_FILE&(1) THEN
  293. 60284    SYMBOL(BLB_DX%+7,BLB_DY%+80+(I%-BLB_FILE&(0))*14),BLB_FILE$(I%),.75!,.75!,%8-(I%=BLB_FSEL%)*7
  294. 60285   ENDIF
  295. 60286  NEXT:IF BLB_FILE&(1)<10 THEN
  296. 60287   BLB_BARL%=88:BLB_BARY%=0
  297. 60288  ELSE
  298. 60289   BLB_BARL%=792/BLB_FILE&(1):BLB_BARY%=(88-BLB_BARL%)*(BLB_FILE&(0)-1)/(BLB_FILE&(1)-9)
  299. 60290   LINE(BLB_DX%+248,BLB_DY%+79)-STEP(13,94),PSET,1,BF
  300. 60291  ENDIF
  301. 60292  LINE(BLB_DX%+248,BLB_DY%+79+BLB_BARY%)-STEP(13,BLB_BARL%+6),PSET,%8,BF,7
  302. 60293  CONNECT STEP(-1,-1)-STEP(0,-3-BLB_BARL%)-STEP(-1,1)-STEP(0,BLB_BARL%+1)-STEP(-8,0)-STEP(-1,1)-STEP(9,0),%8:MOUSE 1,,,1:RETURN
  303. 60294 '
  304. 60295 '部分スクロール処理  入力 I%{上-7≦I%≦7下 I≠0}  使用変数 A% B% I%
  305. 60296 '
  306. 60297 *BLB_FS_SCROLL
  307. 60298 IF I%<0 THEN
  308. 60299  GET@A(BLB_DX%+5,BLB_DY%+79)-(BLB_DX%+242,BLB_DY%+204+I%*14),BLB_MEM%,40000
  309. 60300  PUT@A(BLB_DX%+5,BLB_DY%+79-I%*14)-(BLB_DX%+242,BLB_DY%+204),BLB_MEM%,,,,,40000:A%=0:B%=-I%-1
  310. 60301 ELSE
  311. 60302  GET@A(BLB_DX%+5,BLB_DY%+79+I%*14)-(BLB_DX%+242,BLB_DY%+204),BLB_MEM%,40000
  312. 60303  PUT@A(BLB_DX%+5,BLB_DY%+79)-(BLB_DX%+242,BLB_DY%+204-I%*14),BLB_MEM%,,,,,40000:A%=9-I%:B%=8
  313. 60304 ENDIF
  314. 60305 BLB_FILE&(0)=BLB_FILE&(0)+I%:A%=A%+BLB_FILE&(0):B%=B%+BLB_FILE&(0):GOSUB *BLB_FS_PRINT:RETURN
  315. 60306 '
  316. 60307 'ファイル名 ソート(シェルソート) ただしCD-ROMはソートを行わない
  317. 60308 '
  318. 60309 *BLB_FS_SORT
  319. 60310  IF ASC(BLB_F$(0))=81 OR INP(&H31DC+BLB_DRV%*4)=208 THEN RETURN
  320. 60311  A%=(BLB_FILE&(1)-1)\2:WHILE A%>0:B%=BLB_FILE&(1)-1-A%
  321. 60312  *BLB_FS_SORTLOOP:C%=0:FOR I%=0 TO B%
  322. 60313   IF BLB_F$(I%+1)>BLB_F$(I%+A%+1) THEN SWAP BLB_F$(I%+1),BLB_F$(I%+A%+1):C%=I%
  323. 60314   NEXT:B%=C%-A%:IF C% THEN *BLB_FS_SORTLOOP ELSE A%=(A%+1)\3:WEND:RETURN
  324. 60315 '
  325. 60316 'ディレクトリ移動実行 (入力:A$・・・ディレクトリ名)
  326. 60317 '
  327. 60318 *BLB_FS_SECURITY:MOUSEPAT=1:GOSUB *BLB_MOUSEPAT
  328. 60319  B%=BLB_FILE&(2):GOSUB *BLB_FS_ERASE2:ON ERROR GOTO *BLB_FS_SECURITY_ERROR
  329. 60320  FILES,C,BLB_ICN&:FILES,C,BLB_ICN&:IF BLB_ICN&(1)<>B% AND B%<>0 THEN BLB_FILE&(1)=BLB_ICN&(1):ERROR 63
  330. 60321  SHELL"CD "+A$:GOSUB *BLB_FS_GETFILE:GOSUB *BLB_FS_DIRPRINT2
  331. 60322  WHILE MOUSE(2,0):WEND:ON ERROR GOTO 0:RETURN
  332. 60323 *BLB_FS_SECURITY_ERROR
  333. 60324  IF ERR=63 THEN SHELL"CD \":A$="\":BLB_FILE$(0)="":RESUME *BLB_FS_SECURITY
  334. 60325  BLB_FILE&(1)=-1:BLB_FILE$(0)=CHR$(BLB_DRV%+65)+":<Not Ready>":BLB_FILE&(0)=1:BLB_FSEL%=0:GOSUB *BLB_FS_DIRPRINT:RESUME *BLB_FS_GFRET
  335. 60326 '
  336. 60327 'キー入力(KEY_IN=1のときのみ)
  337. 60328 '
  338. 60329 *BLB_FS_KEYINPUT
  339. 60330  IF I%>128 AND I%<160 OR I%>223 THEN A$=CHR$(I%)+INKEY$ ELSE A$=CHR$(I%)
  340. 60331  IF I%=8 AND BLB_CS%>0 THEN BLB_CS%=LEN(KLEFT$(BLB_F$,KLEN(LEFT$(BLB_F$,BLB_CS%))-1))
  341. 60332  IF (I%=127 OR I%=8)AND LEN(BLB_F$)>BLB_CS% THEN
  342. 60333   BLB_F$=LEFT$(BLB_F$,BLB_CS%)+MID$(BLB_F$,BLB_CS%+2+KTYPE(MID$(BLB_F$,BLB_CS%+1,2),1))
  343. 60334   GOSUB *BLB_FS_PUT_FILENAME
  344. 60335  ELSE IF I%=29 AND BLB_CS%>0 THEN
  345. 60336   GOSUB *BLB_FS_CUR_ERASE:BLB_CS%=LEN(KLEFT$(BLB_F$,KLEN(LEFT$(BLB_F$,BLB_CS%))-1)):GOSUB *BLB_FS_CUR_PUT
  346. 60337  ELSE IF I%=28 AND BLB_CS%<LEN(BLB_F$) AND BLB_CS%<12-LEN(KRIGHT$(BLB_F$,1)) THEN
  347. 60338   GOSUB *BLB_FS_CUR_ERASE:BLB_CS%=BLB_CS%+1+KTYPE(MID$(BLB_F$,BLB_CS%+1,2),1):GOSUB *BLB_FS_CUR_PUT
  348. 60339  ENDIF
  349. 60340  IF I%<32 OR I%=127 THEN RETURN
  350. 60341  A$=LEFT$(BLB_F$,BLB_CS%)+A$+MID$(BLB_F$,BLB_CS%+1):IF LEN(A$)>12 THEN RETURN
  351. 60342  BLB_F$=A$:I%=BLB_CS%+1-(I%>128 AND I%<160 OR I%>223):IF I%<12 THEN BLB_CS%=I%
  352. 60343  GOSUB *BLB_FS_PUT_FILENAME:RETURN
  353. 60344 *BLB_FS_PUT_FILENAME :IF KEY_IN=0 THEN RETURN
  354. 60345  LINE(BLB_DX%+13,BLB_DY%+210)-STEP(71,11),PSET,7,BF
  355. 60346  SYMBOL(BLB_DX%+13,BLB_DY%+210),RIGHT$(BLB_F$,12),.75!,.75!,%8
  356. 60347 *BLB_FS_CUR_PUT
  357. 60348  GET@A(BLB_DX%+13+BLB_CS%*6,BLB_DY%+210)-(BLB_DX%+14+BLB_CS%*6,BLB_DY%+221),BLB_MEM%,77789
  358. 60349  LINE(BLB_DX%+13+BLB_CS%*6,BLB_DY%+210)-STEP(1,11),PSET,2,B:RETURN
  359. 60350 *BLB_FS_CUR_ERASE
  360. 60351  PUT@A(BLB_DX%+13+BLB_CS%*6,BLB_DY%+210)-(BLB_DX%+14+BLB_CS%*6,BLB_DY%+221),BLB_MEM%,,,,,77789:RETURN
  361. 60352 *BLB_FS_FNAME_CLICKED
  362. 60353  IF BLB_MX%<13 THEN BLB_MX%=13
  363. 60354  GOSUB *BLB_FS_CUR_ERASE:BLB_CS%=LEN(KLEFT$(BLB_F$,KLEN(LEFT$(BLB_F$,(BLB_MX%-13)\6)+" ")-1))
  364. 60355  IF BLB_CS%>=12 THEN BLB_CS%=LEN(KLEFT$(BLB_F$,KLEN(LEFT$(BLB_F$,(BLB_MX%-13)\6)+" ")-2))
  365. 60356  GOSUB *BLB_FS_CUR_PUT:WHILE MOUSE(2,0):WEND:GOTO *BLB_FS_MAIN
  366. 60400 '------------------- マウスカーソル形状設定 ver 1.60 一画面モード専用 --------------------------
  367. 60401 '入力 mousepat = マウスパターン番号
  368. 60402 '                (0=通常 1=時計 2=鉛筆 3=手 4=毛抜き 5=スポイト 6=指 7=筆 8=カッター)
  369. 60403 '                ( 負数はアイコン番号(絶対値)。絵柄については TOWNS GEARディクショナリ参照)
  370. 60404 '                (         ただし、負数を指定したときは読み取り位置の補正は行われない)
  371. 60405 *BLB_MOUSEPAT
  372. 60406  IF BLB_MOUSEPAT%=0 THEN DIM BLB_MA&(31),BLB_MD&(31):MOUSE 0:MOUSE 1,320,240,0:BLB_MOUSEPAT%=1
  373. 60407  MOUSE 3,0,INP(&H3B06):MOUSE 3,1,INP(&H3B06)
  374. 60408  IF MOUSEPAT<0 THEN *BLB_MOUSEPAT2
  375. 60409  FOR I%=0 TO 31:BLB_MA&(I%)=PEEK([264]&H2D080+I%*4+MOUSEPAT*256,4)
  376. 60410  BLB_MD&(I%)=BLB_MA&(I%) OR PEEK([264]&H2D000+MOUSEPAT*256+I%*4,4) XOR -1
  377. 60411  NEXT:MOUSE 1,,,1
  378. 60412  MOUSE 6,0,BLB_MA&,BLB_MD&,ASC(MID$("1?1:21111",MOUSEPAT+1))-48,ASC(MID$("1?1:L111N",MOUSEPAT+1))-48:RETURN
  379. 60413 *BLB_MOUSEPAT2
  380. 60414  FOR I%=0 TO 31:BLB_MA&(I%)=PEEK([264]&H27F80+I%*4-MOUSEPAT*256,4)
  381. 60415  BLB_MD&(I%)=(BLB_MA&(I%)XOR-1)AND(PEEK([264]&H27F00-MOUSEPAT*256+I%*4,4)XOR-1)
  382. 60416  NEXT:MOUSE 1,,,1:MOUSE 6,0,BLB_MA&,BLB_MD&,15,15:RETURN
  383.